package com.lcke.common.login;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.lcke.common.rest.Result;
import com.lcke.common.util.HttpContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 拦截器模式，使用拦截器的好处是这是 mvc 提供的方法，可以在WebMvcConfigurer 中配置，
 * 放行路径和拦截路径配置简单
 */
@Slf4j
public class SessionInterceptor implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("拦截器-" + System.currentTimeMillis());
        // 1. 使用 token 鉴权
        String token = HttpContext.getToken();
        if (StrUtil.isBlank(token)) {
            response.getWriter().write(JSONUtil.toJsonStr(Result.error("请设置请求头token")));
            return false;
        }
        // 2. 验证当前token是否已经登录或过期
        String userId = HttpContext.getUser().getUserId();
        if (StrUtil.isBlank(userId)) {
            response.getWriter().write(JSONUtil.toJsonStr(Result.error("当前token不存在或已过期")));
            return false;
        }
        return true;
    }

}